API Catalog
GET /catalog on api.clocktower.finance returns the machine-readable manifest of routes, access tiers, limits, and the chain registry.
Example request
curl -s https://api.clocktower.finance/catalog | jq .
# With developer key
curl -s https://api.clocktower.finance/catalog \
-H "Authorization: Bearer <YOUR_API_KEY>" | jq .
Response shape (v3)
{
"version": "3",
"chainId": 8453,
"chains": [
{
"chainId": 8453,
"caip2": "eip155:8453",
"name": "base",
"rest": true,
"mcp": true,
"default": true
}
],
"pathNote": "On api host, omit the /api prefix (e.g. GET /catalog). Legacy workers.dev URLs keep /api. Protocol routes accept optional ?chainId= (decimal or CAIP-2 eip155:<id>); omitted uses DEFAULT_REST_CHAIN_ID.",
"access": {
"rest": {
"free": {
"auth": "none",
"limits": {
"globalRpm": 20,
"expensiveRpm": 3,
"subgraphDaily": 100,
"writeRpm": 2,
"writeDaily": 20,
"dailyTotalRequests": 500
}
},
"developer": {
"auth": "API key (Authorization: Bearer ctk_…)",
"enabled": true,
"limits": {
"globalRpm": 80,
"expensiveRpm": 40,
"subgraphDaily": 3000,
"writeRpm": 5,
"writeDaily": 100,
"dailyTotalRequests": 5000
},
"management": {
"create": "https://api.clocktower.finance/developer/keys",
"list": "https://api.clocktower.finance/developer/keys?subjectId=",
"revoke": "https://api.clocktower.finance/developer/keys/:id",
"adminAuth": "Bearer <DEVELOPER_KEYS_ADMIN_SECRET> or X-Clocktower-Admin-Key"
}
}
},
"mcp": {
"auth": "none (free) or API key (Authorization: Bearer ctk_…)",
"limits": "same as access.rest.free / access.rest.developer"
}
},
"apiEnabled": true,
"developerKeysEnabled": true,
"routes": [
{ "method": "GET", "path": "/api/catalog", "description": "..." }
]
}
- Top-level
chainIdis the REST default when?chainId=is omitted. chains[]lists registered chains (rest,mcp,default). Read this at runtime rather than hard-coding supported IDs.- Catalog itself is not filtered by chain, but an unsupported
?chainId=on the request still returns 400.
Use the catalog to discover endpoints and to verify which auth modes and limits apply at runtime. Limit fields include writeRpm, writeDaily, and dailyTotalRequests.
See Chain selection.